home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / linux / lp.h < prev    next >
C/C++ Source or Header  |  2005-10-13  |  6KB  |  192 lines

  1. #ifndef _LINUX_LP_H
  2. #define _LINUX_LP_H
  3.  
  4. /*
  5.  * usr/include/linux/lp.h c.1991-1992 James Wiegand
  6.  * many modifications copyright (C) 1992 Michael K. Johnson
  7.  * Interrupt support added 1993 Nigel Gamble
  8.  * Removed 8255 status defines from inside __KERNEL__ Marcelo Tosatti 
  9.  */
  10.  
  11. /*
  12.  * Per POSIX guidelines, this module reserves the LP and lp prefixes
  13.  * These are the lp_table[minor].flags flags...
  14.  */
  15. #define LP_EXIST 0x0001
  16. #define LP_SELEC 0x0002
  17. #define LP_BUSY     0x0004
  18. #define LP_BUSY_BIT_POS 2
  19. #define LP_OFFL     0x0008
  20. #define LP_NOPA  0x0010
  21. #define LP_ERR   0x0020
  22. #define LP_ABORT 0x0040
  23. #define LP_CAREFUL 0x0080 /* obsoleted -arca */
  24. #define LP_ABORTOPEN 0x0100
  25.  
  26. #define LP_TRUST_IRQ_  0x0200 /* obsolete */
  27. #define LP_NO_REVERSE  0x0400 /* No reverse mode available. */
  28. #define LP_DATA_AVAIL  0x0800 /* Data is available. */
  29.  
  30. /* 
  31.  * bit defines for 8255 status port
  32.  * base + 1
  33.  * accessed with LP_S(minor), which gets the byte...
  34.  */
  35. #define LP_PBUSY    0x80  /* inverted input, active high */
  36. #define LP_PACK        0x40  /* unchanged input, active low */
  37. #define LP_POUTPA    0x20  /* unchanged input, active high */
  38. #define LP_PSELECD    0x10  /* unchanged input, active high */
  39. #define LP_PERRORP    0x08  /* unchanged input, active low */
  40.  
  41. /* timeout for each character.  This is relative to bus cycles -- it
  42.  * is the count in a busy loop.  THIS IS THE VALUE TO CHANGE if you
  43.  * have extremely slow printing, or if the machine seems to slow down
  44.  * a lot when you print.  If you have slow printing, increase this
  45.  * number and recompile, and if your system gets bogged down, decrease
  46.  * this number.  This can be changed with the tunelp(8) command as well.
  47.  */
  48.  
  49. #define LP_INIT_CHAR 1000
  50.  
  51. /* The parallel port specs apparently say that there needs to be
  52.  * a .5usec wait before and after the strobe.
  53.  */
  54.  
  55. #define LP_INIT_WAIT 1
  56.  
  57. /* This is the amount of time that the driver waits for the printer to
  58.  * catch up when the printer's buffer appears to be filled.  If you
  59.  * want to tune this and have a fast printer (i.e. HPIIIP), decrease
  60.  * this number, and if you have a slow printer, increase this number.
  61.  * This is in hundredths of a second, the default 2 being .05 second.
  62.  * Or use the tunelp(8) command, which is especially nice if you want
  63.  * change back and forth between character and graphics printing, which
  64.  * are wildly different...
  65.  */
  66.  
  67. #define LP_INIT_TIME 2
  68.  
  69. /* IOCTL numbers */
  70. #define LPCHAR   0x0601  /* corresponds to LP_INIT_CHAR */
  71. #define LPTIME   0x0602  /* corresponds to LP_INIT_TIME */
  72. #define LPABORT  0x0604  /* call with TRUE arg to abort on error,
  73.                 FALSE to retry.  Default is retry.  */
  74. #define LPSETIRQ 0x0605  /* call with new IRQ number,
  75.                 or 0 for polling (no IRQ) */
  76. #define LPGETIRQ 0x0606  /* get the current IRQ number */
  77. #define LPWAIT   0x0608  /* corresponds to LP_INIT_WAIT */
  78. /* NOTE: LPCAREFUL is obsoleted and it' s always the default right now -arca */
  79. #define LPCAREFUL   0x0609  /* call with TRUE arg to require out-of-paper, off-
  80.                 line, and error indicators good on all writes,
  81.                 FALSE to ignore them.  Default is ignore. */
  82. #define LPABORTOPEN 0x060a  /* call with TRUE arg to abort open() on error,
  83.                 FALSE to ignore error.  Default is ignore.  */
  84. #define LPGETSTATUS 0x060b  /* return LP_S(minor) */
  85. #define LPRESET     0x060c  /* reset printer */
  86. #ifdef LP_STATS
  87. #define LPGETSTATS  0x060d  /* get statistics (struct lp_stats) */
  88. #endif
  89. #define LPGETFLAGS  0x060e  /* get status flags */
  90. #define LPSETTIMEOUT 0x060f /* set parport timeout */
  91.  
  92. /* timeout for printk'ing a timeout, in jiffies (100ths of a second).
  93.    This is also used for re-checking error conditions if LP_ABORT is
  94.    not set.  This is the default behavior. */
  95.  
  96. #define LP_TIMEOUT_INTERRUPT    (60 * HZ)
  97. #define LP_TIMEOUT_POLLED    (10 * HZ)
  98.  
  99. #ifdef __KERNEL__
  100.  
  101. #include <linux/wait.h>
  102. #include <asm/semaphore.h>
  103.  
  104. /* Magic numbers for defining port-device mappings */
  105. #define LP_PARPORT_UNSPEC -4
  106. #define LP_PARPORT_AUTO -3
  107. #define LP_PARPORT_OFF -2
  108. #define LP_PARPORT_NONE -1
  109.  
  110. #define LP_F(minor)    lp_table[(minor)].flags        /* flags for busy, etc. */
  111. #define LP_CHAR(minor)    lp_table[(minor)].chars        /* busy timeout */
  112. #define LP_TIME(minor)    lp_table[(minor)].time        /* wait time */
  113. #define LP_WAIT(minor)    lp_table[(minor)].wait        /* strobe wait */
  114. #define LP_IRQ(minor)    lp_table[(minor)].dev->port->irq /* interrupt # */
  115.                     /* PARPORT_IRQ_NONE means polled */
  116. #ifdef LP_STATS
  117. #define LP_STAT(minor)    lp_table[(minor)].stats        /* statistics area */
  118. #endif
  119. #define LP_BUFFER_SIZE PAGE_SIZE
  120.  
  121. #define LP_BASE(x)    lp_table[(x)].dev->port->base
  122.  
  123. #ifdef LP_STATS
  124. struct lp_stats {
  125.     unsigned long chars;
  126.     unsigned long sleeps;
  127.     unsigned int maxrun;
  128.     unsigned int maxwait;
  129.     unsigned int meanwait;
  130.     unsigned int mdev;
  131. };
  132. #endif
  133.  
  134. struct lp_struct {
  135.     struct pardevice *dev;
  136.     unsigned long flags;
  137.     unsigned int chars;
  138.     unsigned int time;
  139.     unsigned int wait;
  140.     char *lp_buffer;
  141. #ifdef LP_STATS
  142.     unsigned int lastcall;
  143.     unsigned int runchars;
  144.     struct lp_stats stats;
  145. #endif
  146.     wait_queue_head_t waitq;
  147.     unsigned int last_error;
  148.     struct semaphore port_mutex;
  149.     wait_queue_head_t dataq;
  150.     long timeout;
  151.     unsigned int best_mode;
  152.     unsigned int current_mode;
  153.     unsigned long bits;
  154. };
  155.  
  156. /*
  157.  * The following constants describe the various signals of the printer port
  158.  * hardware.  Note that the hardware inverts some signals and that some
  159.  * signals are active low.  An example is LP_STROBE, which must be programmed
  160.  * with 1 for being active and 0 for being inactive, because the strobe signal
  161.  * gets inverted, but it is also active low.
  162.  */
  163.  
  164.  
  165. /* 
  166.  * defines for 8255 control port
  167.  * base + 2 
  168.  * accessed with LP_C(minor)
  169.  */
  170. #define LP_PINTEN    0x10  /* high to read data in or-ed with data out */
  171. #define LP_PSELECP    0x08  /* inverted output, active low */
  172. #define LP_PINITP    0x04  /* unchanged output, active low */
  173. #define LP_PAUTOLF    0x02  /* inverted output, active low */
  174. #define LP_PSTROBE    0x01  /* short high output on raising edge */
  175.  
  176. /* 
  177.  * the value written to ports to test existence. PC-style ports will 
  178.  * return the value written. AT-style ports will return 0. so why not
  179.  * make them the same ? 
  180.  */
  181. #define LP_DUMMY    0x00
  182.  
  183. /*
  184.  * This is the port delay time, in microseconds.
  185.  * It is used only in the lp_init() and lp_reset() routine.
  186.  */
  187. #define LP_DELAY     50
  188.  
  189. #endif
  190.  
  191. #endif
  192.